import Vue from 'vue'
import Vuex from 'vuex'
import { SET_USER_INFO, UPDATE_USER_INFO } from './types'
import { getUserInfo } from '@/request/api'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    userInfo: {}
  },
  // 相当于是computed
  getters: {
    menus(state) {
      const menus = state.userInfo.menus || []
      // const arr = []
      // menus.forEach(item => {
      //   // 先找出所有一级菜单， parentId - 0
      //   if (item.parentId === 0 && item.hidden === 0) {
      //     arr.push(item)
      //   }
      // })

      // arr.forEach(p => {
      //   p.children = []
      //   menus.forEach(sub => {
      //     if (p.id === sub.parentId && sub.hidden === 0) {
      //       p.children.push(sub)
      //     }
      //   })
      // })

      // 先得到1级
      const parent = menus.filter(item => item.parentId === 0)
      // 接着处理2级
      parent.forEach(p => {
        p.children = []
        menus.forEach(sub => {
          if (p.id === sub.parentId) {
            p.children.push(sub)
          }
        })
      })
      return parent
    },
    permissions(state) {
      let per = state.userInfo.menus || []
      return per.map(item => item.name)
    }
  },
  mutations: {
    [SET_USER_INFO](state, payload) {
      state.userInfo = payload
    },
  },
  actions: {
    // 将来是有可能把请求写在这的，因为可能这个请求在多个组件都有使用
    // 根据token获取用户信息的请求，在login和beforeEach都有到了
    [UPDATE_USER_INFO]({ commit }) {
      return new Promise((resolve, reject) => {
        getUserInfo().then(res => {
          if (res.code === 200) {
            // 把获取到的用户的角色和菜单数据存在 vuex
            commit(SET_USER_INFO, res.data)
            resolve(res)
          } else {
            reject(res)
          }
        })
      })

    }
  },
  modules: {
  }
})
